import api from './index'
import { useAuthStore } from '../stores/auth'

/**
 * 聊天相关API模块
 */

export const chatApi = {
  /**
   * 获取文件上传配置
   * @returns {Promise<Object>} 上传配置信息
   */
  getUploadConfig: async () => {
    try {
      const response = await api.get('/chat/upload-config')
      return response.data
    } catch (error) {
      console.error('获取上传配置失败:', error)
      // 如果获取配置失败，返回默认配置
      return {
        max_file_size: 5242880, // 5MB
        allowed_extensions: ['txt', 'pdf', 'doc', 'docx', 'jpg', 'jpeg', 'png', 'gif']
      }
    }
  },

  /**
   * 获取聊天会话列表
   * @returns {Promise<Array>} 会话列表
   */
  getSessions: async () => {
    const response = await api.get('/chat/sessions')
    return response.data
  },

  /**
   * 创建新的聊天会话
   * @param {Object} sessionData - 会话数据
   * @param {string} sessionData.title - 会话标题（可选）
   * @returns {Promise<Object>} 新创建的会话
   */
  createSession: async (sessionData = {}) => {
    const response = await api.post('/chat/sessions', sessionData)
    return response.data
  },

  /**
   * 获取指定会话的聊天消息
   * @param {string} sessionId - 会话ID
   * @returns {Promise<Array>} 消息列表
   */
  getSessionMessages: async (sessionId) => {
    const response = await api.get(`/chat/sessions/${sessionId}/messages`)
    return response.data
  },

  /**
   * 更新聊天会话
   * @param {string} sessionId - 会话ID
   * @param {Object} sessionData - 会话更新数据
   * @param {string} sessionData.title - 新标题（可选）
   * @param {boolean} sessionData.pinned - 置顶状态（可选）
   * @returns {Promise<Object>} 更新结果
   */
  updateSession: async (sessionId, sessionData) => {
    const response = await api.patch(`/chat/sessions/${sessionId}`, sessionData)
    return response.data
  },

  /**
   * 置顶聊天会话
   * @param {string} sessionId - 会话ID
   * @returns {Promise<Object>} 置顶结果
   */
  pinSession: async (sessionId) => {
    const response = await api.patch(`/chat/sessions/${sessionId}/pin`)
    return response.data
  },

  /**
   * 取消置顶聊天会话
   * @param {string} sessionId - 会话ID
   * @returns {Promise<Object>} 取消置顶结果
   */
  unpinSession: async (sessionId) => {
    const response = await api.patch(`/chat/sessions/${sessionId}/unpin`)
    return response.data
  },

  /**
   * 删除聊天会话
   * @param {string} sessionId - 会话ID
   * @returns {Promise<Object>} 删除结果
   */
  deleteSession: async (sessionId) => {
    const response = await api.delete(`/chat/sessions/${sessionId}`)
    return response.data
  },

  /**
   * 上传文件
   * @param {File} file - 要上传的文件
   * @returns {Promise<Object>} 上传结果
   */
  uploadFile: async (file) => {
    const formData = new FormData()
    formData.append('file', file)
    
    const response = await api.post('/chat/upload-file', formData, {
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    })
    return response.data
  },

  /**
   * 下载文件
   * @param {string} fileId - 文件ID
   * @returns {Promise<Blob>} 文件数据
   */
  downloadFile: async (fileId) => {
    const response = await api.get(`/chat/download-file/${fileId}`, {
      responseType: 'blob'
    })
    return response.data
  },

  /**
   * 获取会话的流式状态
   * @param {string} sessionId - 会话ID
   * @returns {Promise<Object>} 流式状态信息
   */
  getStreamingStatus: async (sessionId) => {
    try {
      const response = await api.get(`/chat/sessions/${sessionId}/streaming-status`)
      return response.data
    } catch (error) {
      console.error('获取流式状态失败:', error)
      // 如果获取失败，返回默认状态
      return {
        has_streaming: false,
        message_id: null,
        is_final: true
      }
    }
  },

  /**
   * 发送聊天消息（流式响应）
   * @param {string} sessionId - 会话ID
   * @param {Object} messageData - 消息数据
   * @param {string} messageData.message - 消息内容
   * @param {string} messageData.message_type - 消息类型
   * @param {File} messageData.file - 文件（可选）
   * @param {boolean} messageData.enable_search - 是否启用搜索
   * @returns {Promise<Response>} fetch响应对象
   */
  sendMessageStream: async (sessionId, messageData) => {
    const apiBaseUrl = import.meta.env.VITE_API_BASE_URL || 'http://localhost:8000'
    const authStore = useAuthStore()
    
    const formData = new FormData()
    formData.append('message', messageData.message)
    formData.append('message_type', messageData.message_type || 'text')
    formData.append('enable_search', messageData.enable_search?.toString() || 'true')
    
    if (messageData.file) {
      formData.append('file', messageData.file)
    }
    
    return fetch(`${apiBaseUrl}/chat/sessions/${sessionId}/send-message-stream`, {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${authStore.token}`
      },
      body: formData
    })
  }
}

export default chatApi